package de.preisrobot.service;

import java.util.Date;
import java.util.List;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import de.preiscrawler.parser.Parser;
import de.preisrobot.entity.AmazonArtikelImage;
import de.preisrobot.entity.AmazonGrabUrl;
import de.preisrobot.entity.Artikel;
import de.preisrobot.entity.CrawlerLinkUrl;
import de.preisrobot.persistence.dao.ArtikelDao;
import de.preisrobot.service.internal.AmazonImageGrabber;
import de.preisrobot.service.internal.PreisRobotParserException;

@Service("billigerGrabberService")
public class BilligerGrabberService implements GrabberService {

    private static Logger log = Logger.getLogger(BilligerGrabberService.class);

    @Autowired
    private ArtikelDao artikelDao;

    private Parser parser;

    @Override
    public void setParser(final Parser p) {
        this.parser = p;
    }

    public void grapUrl(final String sourceUrlString) {

        List<Artikel> amazonList;
        try {
            amazonList = parser.parse(sourceUrlString);

        } catch (final PreisRobotParserException e) {
            System.err.println("no valid elemnt was found on \n " + sourceUrlString);
            throw new RuntimeException();
        } catch (final Exception e) {
            e.printStackTrace();
            return;
        }

        for (final Artikel Artikel : amazonList) {

            System.out.println(Artikel.getArtikelNr() + " " + Artikel.getPreis());
            artikelDao.saveArtikel(Artikel);

        }

        final AmazonGrabUrl grabUrl = new AmazonGrabUrl();
        grabUrl.setLink(sourceUrlString);
        grabUrl.setLastvisited(new Date());
        artikelDao.save(grabUrl);
    }

    @Override
    public void grapImage(final Artikel Artikel) {
        final AmazonImageGrabber g = new AmazonImageGrabber();
        try {
            final AmazonArtikelImage image = g.getImage(Artikel.getImageLink());
            image.setArtikelId(Artikel.getId());
            image.setArtikelNr(Artikel.getArtikelNr());
            image.setCreationDate(new Date());
            image.setTyp("" + 0);
            artikelDao.save(image);
        } catch (final Exception e) {
            log.warn(Artikel.getId() + " hat ungueltigen ImageLInk" + Artikel.getImageLink());
        }
    }

    @Override
    public List<Artikel> grapUrl(final CrawlerLinkUrl link) {
        List<Artikel> list = null;
        try {
            list = parser.parse(link.getLink());
        } catch (final Exception e) {

            e.printStackTrace();
        }
        return list;
    }

    @Override
    public void grapAndSave(final CrawlerLinkUrl sourceUrlString) {
        // TODO Auto-generated method stub

    }

}
